Skip to content

Conversation

@Thorium
Copy link

@Thorium Thorium commented Oct 30, 2025

Fixes #3489

Summary

This PR adds a proper default formatter for binary data (byte[] and ReadOnlyMemory) that displays data in a hexadecimal dump format with address offsets, hex values, and ASCII representation.

Motivation

Currently, byte arrays are displayed as simple lists of numbers, which makes it difficult to:

Quickly understand binary data structure

  • Identify patterns in hex values
  • See which bytes represent printable ASCII characters
  • Debug binary protocols or file formats

Output format:

00000000  48 65 6C 6C 6F 20 57 6F  72 6C 64 21 00 FF AB CD  |Hello World!....|
00000010  01 02 03 04                                       |....|

Features

  • Address offsets: 8 hex digits (e.g., 00000000, 00000010)
  • Hex values: 16 bytes per line, grouped in 8-byte chunks for readability
  • ASCII representation: Printable characters (32-126) shown, others as .
  • Proper spacing: Extra space between byte groups, aligned ASCII column
  • HTML support: Wraps output in <pre class="dni-binary"> tag
  • Unit-tests added

Design Decisions

  • 16 bytes per line: Industry standard for hex dumps (matches xxd, hex editors)
  • 8-byte grouping: Helps identify 64-bit boundaries and improves readability
  • Uppercase hex: Conventional and easier to distinguish from letters
  • Null/empty handling: Null arrays show , empty arrays show nothing
  • Non-breaking: Uses existing formatter infrastructure, no breaking changes

@Thorium
Copy link
Author

Thorium commented Oct 30, 2025

The CI unit-tests Formatting_api_is_not_changed fails because there is a new class "in the public api": BinaryFormatter.
Is this acceptable change, and if it is, then what should be done to get the test fixed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Microsoft.DotNet.Interactive.Formatting binary data formatter

1 participant